/*feof() 函数判断文件的内部指针是否指向文件结尾。它的原型定义在头文件stdio.h。

 int feof(FILE *fp);
feof() 接受一个文件指针作为参数。如果已经到达文件结尾，会返回一个非零值（表示 true），否则返回0（表示 false）。

诸如fgetc()这样的文件读取函数，如果返回 EOF，有两种可能，一种可能是已读取到文件结尾，另一种可能是出现读取错误。feof()可以用来判断到底是那一种情况。

 下面是通过feof()判断是否到达文件结尾，从而循环读取整个文件的例子。
 */
#include <stdio.h>

int main(void)
{
    char s[1024];

    FILE *fp = fopen("data.txt", "r");
    if (fp == NULL)
    {
        printf("open file error\n");
        return -1;
    }
    while (!feof(fp))
    {
        while (fgets(s, sizeof s, fp) != NULL)
            printf("%s", s);

        int closed = fclose(fp);
        if (closed != 0)
        {
            printf("close file error\n");
        }
        return 0;
    }
}

/*
上面示例通过循环判断feof()是否读到文件结尾，从而实现读出整个文件内容。

feof()为真时，可以通过fseek()、rewind()、fsetpos()函数改变文件内部读写位置的指示器，从而清除这个函数的状态。
*/
